/**
 @file  DateUtils.h
 @brief 날짜 처리 구현
 */

#import <Foundation/Foundation.h>

/**
 @class MNKCDateUtils 
 @brief 날짜 증가, 감소, 비교함수 구현 클래스. 양력 음력 변환은 변환 DB가 필요하다. 
 */

@interface DateUtils : NSObject {
    NSDateFormatter *dateFormatter;		/**< 날짜 포멧을 변경하기 위한 객체  */
    NSCalendar *gregorian;				/**< 날짜 달력은 서양력을 사용 */
    NSDateComponents *offsetComponents;	/**< 날짜 증가, 감소등을 처리하기 위해서 사용 */
}

- (BOOL)betweenDate:(NSDate *)date From:(NSDate *)from To:(NSDate *)to;

- (int)getYearFromDate:(NSDate *)date;      // 년도 반환
- (int)getMonthFromDate:(NSDate *)date;     // 월 반환
- (int)getDayFromDate:(NSDate *)date;       // 일 반환
- (int)getMinuteFromDate:(NSDate *)date;    // 분 반환
- (int)getHourFromDate:(NSDate *)date;      // 시 반환

- (NSString *)formatDateTimeWithFormatString:(NSString *)formatString Date:(NSDate *)date;
- (NSString *)formatDateTimeWithFormatString:(NSString *)formatString Date:(NSDate *)date LocaleName:(NSString *)localeName;
- (NSDate *)getDateFromString:(NSString *)dateString;
- (NSDate *)getDateFromString:(NSString *)dateString withFormatString:(NSString *)formatString;

- (NSDate *)incDay:(NSDate *)date increment:(int)iday;      // 날짜 증가
- (NSDate *)incMonth:(NSDate *)date increment:(int)iMonth;  // 월 증가
- (NSDate *)incYear:(NSDate *)date increment:(int)iYear;    // 년도 증가
- (NSDate *)incWeek:(NSDate *)date increment:(int)iWeek;    // 주 증가
- (NSDate *)incHour:(NSDate *)date increment:(int)iHour;    // 시간 증가
- (NSDate *)incMinutes:(NSDate *)date increment:(int)iMinutes;  // 분 증가
- (NSDate *)incSecond:(NSDate *)date increment:(int)second;

- (NSDate *) inCustomDay:(NSDate *)date increment:(int)days index:(int)index ; //지울것

- (NSDate *)decYear:(NSDate *)date decrement:(int)iYear;    // 년 감소
- (NSDate *)decMonth:(NSDate *)date decrement:(int)iMonth;  // 월 감소
- (NSDate *)decDay:(NSDate *)date decrement:(int)iday;     // 날짜 감소
- (NSDate *)decWeek:(NSDate *)date decrement:(int)iWeek;   // 주 감소
- (NSDate *)decHour:(NSDate *)date decrement:(int)iHour;    // 시간 감소
- (NSDate *)decMinutes:(NSDate *)date decrement:(int)iMinutes;  // 분 감소
- (NSDate *)decSecond:(NSDate *)date decrement:(int)second;

- (int)dayOfWeek:(NSDate *)date;    // 해당 주의 요일
- (int)weekOfMonth:(NSDate *)date;  // 해당월의 몇 주차
- (int)dayOfMonth:(NSDate *)month;  // 해당월의 마지막 일자

- (NSDate *)dayofWeekMondayDate:(NSDate *)date; // 주간 월요일
- (NSDate *)dayOfWeekSaturdayDate:(NSDate *)date;  // 주간 토요일
- (NSDate *)dayOfWeekSundayDate:(NSDate *)date;   // 주간 일요일

- (NSArray *)getWeekDaySymbols;

- (int)betweenDayFromDate:(NSDate *)fromDate TodDate:(NSDate *)toDate;
- (int)betweenSecondFromDate:(NSDate *)fromDate TodDate:(NSDate *)toDate;

// 분 반올림(예 10:51->10:55)
// rangeUnit 시간 단위(예 5분, 10분, 15분등);
- (NSDate *)roundMinuteWithDate:(NSDate *)date rangeUnit:(int)rangeUnit; 

- (int)getHour12FromDate:(NSDate *)date;                // 시 반환(12시간제)
- (NSString *)getAPMFromDate:(NSDate *)date;            // AM/PM 반환
- (NSString *)getAPMFromDateKor:(NSDate *)date;         // 오전/오후 반환
- (NSString *)getTime12String:(NSDate *)date;           // 12시간제 시간 반환           
- (NSDate *)getTimeFromString:(NSString *)timeString;

- (int)getBetweenDays:(NSDate *)fromDay toDate:(NSDate *)toDay;

@end
